﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static MyDelegate.ActionFunc;

namespace MyDelegate
{
    /// <summary>
    /// 多播委托
    /// </summary>
    public class CustomMulticastDelegation
    {
        public void Show()
        {
            #region 这种就叫多播委托
            Action action = new Action(DoNothing);
            ////委托还可以通过+= 把更多的方法包装到委托中来，形成一个方法的执行链子
            ////在执行委托的时候，可以按照+=的顺序，把方法逐个执行；
            action += DoNothing;
            action += DoNothing;
            action += DoNothing;
            action += DoNothing;

            //也提供了-= 操作，可以按照顺序把方法从方法链子中，依次移除；移除按照顺序依次移除，只要是匹配移除一个之后，就不在继续移除了；如果要移除的方法在，委托中不存在，-=就不做任何操作；
            action -= DoNothing;
            //action -= DoNothing;
            //action -= DoNothing;

            action.Invoke(); 
            #endregion
        }


        private void DoNothing()
        {
            Console.WriteLine("This is DoNothing");
        }

        private static void DoNothingStatic()
        {
            Console.WriteLine("This is DoNothingStatic");
        }
    }
}
